package com.christina.engine.service.factory;

import com.christina.engine.service.executor.ServiceExecutor;
import java.util.List;
import java.util.Optional;

/**
 * 服务执行器工厂接口
 * 负责服务执行器的注册、获取和生命周期管理
 *
 * @author Christina
 */
public interface ServiceExecutorFactory {
    
    /**
     * 注册一个新的服务执行器
     * 
     * @param executor 要注册的服务执行器
     * @throws IllegalArgumentException 如果执行器为空或已存在
     */
    void registerExecutor(ServiceExecutor executor);
    
    /**
     * 注销一个已注册的服务执行器
     * 
     * @param executorId 执行器ID
     * @return 是否成功注销
     */
    boolean unregisterExecutor(String executorId);
    
    /**
     * 根据执行器ID获取服务执行器
     * 
     * @param executorId 执行器ID
     * @return 服务执行器，如果不存在则返回空
     */
    Optional<ServiceExecutor> getExecutor(String executorId);
    
    /**
     * 获取所有已注册的服务执行器
     * 
     * @return 服务执行器列表
     */
    List<ServiceExecutor> getAllExecutors();
    
    /**
     * 根据服务类型获取服务执行器
     * 
     * @param serviceType 服务类型
     * @return 匹配的服务执行器列表
     */
    List<ServiceExecutor> getExecutorsByServiceType(String serviceType);
    
    /**
     * 初始化所有已注册的服务执行器
     */
    void initializeExecutors();
    
    /**
     * 关闭所有服务执行器，释放资源
     */
    void shutdownExecutors();
    
    /**
     * 检查服务执行器是否存在
     * 
     * @param executorId 执行器ID
     * @return 是否存在
     */
    boolean exists(String executorId);
    
    /**
     * 获取已注册的执行器数量
     * 
     * @return 执行器数量
     */
    int getExecutorCount();
}